我使用了自己的開源套件 LexLibrary.Line.NotifyBot,直接從 NuGet 就可以下載安裝,節省了許多串接 API 時所需的開發與測試時間,只需安裝套件後即可快速開發 Line Notify Bot!!
系列文章:
Startup.cs
找到 ConfigureServices
方法,並在這裡新增下列程式碼services.AddLogging();
services.AddHttpClient();
services.AddLineNotifyBot(new LineNotifyBotSetting
{
ClientID = "",
ClientSecret = "",
AuthorizeApi = "https://notify-bot.line.me/oauth/authorize",
TokenApi = "https://notify-bot.line.me/oauth/token",
NotifyApi = "https://notify-api.line.me/api/notify",
StatusApi = "https://notify-api.line.me/api/status",
RevokeApi = "https://notify-api.line.me/api/revoke"
});
LineNotifyBotApi.GenerateAuthorizeUrl
即可取得 Redirect Url。string callBackUrl = string.Format("{0}://{1}{2}", Request.Scheme, Request.Host, Url.Action("CallBack"));
string clientAuthorizeUrl = _lineNotifyBotApi.GenerateAuthorizeUrl(callBackUrl, "1234");
※ 1234
這個參數可以拿來做 XSS 驗證避免被攻擊
4. 使用者授權完後 Line 會 CallBack 到上面定義好的網址,可以用 AuthorizeCallbackDTO
這個物件接收參數
public IActionResult CallBack(AuthorizeCallbackDTO callbackDTO)
{
// 可能是第三方攻擊
if (callbackDTO.State != "1234")
{
return new UnauthorizedResult();
}
return RedirectToAction("Index", new { callbackDTO.Code });
}
AuthorizeCallbackDTO.Code
的值去呼叫 LineNotifyBotApi.Token
,可以取得發送訊息給使用者的 AccessTokenvar apiResult = await _lineNotifyBotApi.Token(new TokenRequestDTO
{
Code = code,
RedirectUri = callBackUrl
});
ViewBag.AccessToken = apiResult.Access_Token;
LineNotifyBotApi.Notify
發送訊息給使用者囉!var apiResult = await _lineNotifyBotApi.Notify(new NotifyRequestDTO
{
AccessToken = accessToken,
Message = message
});
ViewBag.ResultJson = JsonConvert.SerializeObject(apiResult, Formatting.Indented);
7. 我有寫一個簡單的範例放到 GitHub 供給大家參考,有問題歡迎在下方留言給我。